package cn.seaboot.admin.activemq;

import org.eclipse.paho.client.mqttv3.*;

/**
 * 接收 MQTT 消息
 *
 * @author Mr.css
 * @version 2024-10-15 9:16
 */
public class MqttReceiver implements MqttCallback {
    public static void main(String[] args) {
        try {
            String broker = "tcp://127.0.0.1:1883";
            String clientId = "fvKm5UvcRv24jYpgw7WjfQ";

            String username = "fvKm5UvcRv24jYpgw7WjfQ";
            String password = "4CuaE-xUR7WLgYOREIM5rw";



            MqttClient client = new MqttClient(broker, clientId);
            MqttCallback callback = new MqttReceiver();

            client.setCallback(callback);

            // 使用自定义参数连接
            MqttConnectOptions options = new MqttConnectOptions();
            options.setUserName(username);
            options.setPassword(password.toCharArray());
            options.setConnectionTimeout(360);
            options.setKeepAliveInterval(360);

            // 不清除会话，重启的时候，可以获取到断线期间的消息，这个配置非常重要
            options.setCleanSession(false);
            client.connect(options);

            int qos = 2;

//            GNSS01		华测平台上也没有
//            GNSS04 		华测平台上也没有
//            HS 含水率	没收到
//            SL02 裂缝	没收到
//            SL03 裂缝	没收到
//            SL04 裂缝	没收到
//            YL01 雨量	我们受到了设备状态信息，但是没收到设备数据

            // G237+1496

            // 裂缝 没数据
            // SL02
            client.subscribe("iot/fvKm5UvcRv24jYpgw7WjfQ/4328422", qos);
            // SL03
            client.subscribe("iot/fvKm5UvcRv24jYpgw7WjfQ/4328459", qos);
            // SL04
            client.subscribe("iot/fvKm5UvcRv24jYpgw7WjfQ/4328463", qos);

            // SL01 裂缝 这个没问题
            client.subscribe("iot/fvKm5UvcRv24jYpgw7WjfQ/4328486", qos);

            // HS 含水率
            client.subscribe("iot/fvKm5UvcRv24jYpgw7WjfQ/1424090008", qos);
            // YL01 雨量
            client.subscribe("iot/fvKm5UvcRv24jYpgw7WjfQ/A2411600G0454", qos);

            // client.close();
        } catch (MqttException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void connectionLost(Throwable cause) {
        // 当连接丢失时调用
        System.out.println("Connection lost");
        cause.printStackTrace();
    }

    @Override
    public void messageArrived(String topic, MqttMessage message) throws Exception {
        // 当接收到消息时调用
        System.out.println("Message arrived: " + new String(message.getPayload()));
    }

    @Override
    public void deliveryComplete(IMqttDeliveryToken token) {
        // 当消息发送成功时调用
        System.out.println("Delivery complete");
    }
}